#!/usr/bin/python
# author dennis
# 2022年06月10日


# 系统需求
# 1. 程序启动，显示名片管理系统欢迎界面，并显示功能菜单
# **************************************************
# 欢迎使用【名片管理系统】V1.0
# 1. 新建名片
# 2. 显示全部
# 3. 查询名片
# 0. 退出系统
# **************************************************
# 用户用数字选择不同的功能
# 根据功能选择，执行不同的功能
# 用户名片需要记录用户的 姓名、电话、QQ、邮件
# 如果查询到指定的名片，用户可以选择 修改 或者 删除 名片
import sys
import time


def view():
    """
    开始界面
    :return:
    """
    print("*" * 60)
    print("欢迎使用【名片管理系统】V1.0".center(60))
    print("1.新建名片".center(60))
    print("2.显示全部".center(60))
    print("3.查询名片".center(60))
    print("0.退出系统".center(60))
    print("*" * 60)


def create():
    """
    新增信息
    :return:
    """
    print("*" * 60)
    print("请输入新增信息：")
    name = input("姓名：")
    phone = input("电话：")
    qq = input("QQ:")
    email = input("email:")
    dict_new = {"姓名": name, "电话": phone, "QQ": qq, "email": email}

    # 将新增信息添加到列表
    list_info.append(dict_new)

    print("保存成功！")
    print("*" * 60)


def show():
    """
    显示所有的信息
    :return:
    """
    print("姓名".ljust(15), end="")
    print("电话".ljust(15), end="")
    print("QQ".ljust(15), end="")
    print("email".ljust(15), end="")
    print('\n')
    for item in list_info:
        for value in item.values():
            print(value.ljust(15), end="")
        print('\n')
    print("*" * 60)


def modification(**kwargs):
    """
    修改名片
    :return:
    """
    number = input("请输入修改数据的编号：")
    kw = kwargs[number]
    for item in list_info:  # 遍历信息列表i（单元类型为dict）
        for value in item.values():  # 遍历每个名片的value
            if value == kw:
                x = input("请输入修改后的姓名：")
                if x:
                    item["姓名"] = x
                x = input("请输入修改后的电话：")
                if x:
                    item["电话"] = x
                x = input("请输入修改后的QQ：")
                if x:
                    item["QQ"] = x
                x = input("请输入修改后的email：")
                if x:
                    item["email"] = x
                print("修改成功！")
                time.sleep(1)


def delete(**kwargs):
    """
    删除名片
    :return:
    """
    # print(kwargs)
    number = input("请输入删除数据的编号：")
    kw = kwargs[number]
    k = 0
    for item in list_info:
        for i in item.values():
            if i == kw:
                list_info.pop(k)
            else:
                k += 1
    print("删除完成！")
    print("*" * 60)


def search_detail(key, kw):
    """
    查询函数（模糊查询,输入部分信息）
    :param key: 关键字
    :param kw: value值中的片段信息or完整信息
    :return:
    """
    print("编号".ljust(10), end="")  # 添加编号column
    for k in list_info[0]:
        print(k.ljust(15), end="")
    print('\n')
    row_num = {}  # 存储每一行对应的序号
    i = 0
    for item in list_info:
        if item[key].find(kw) != -1:  # value中是否包含kw
            i += 1
            row_num[str(i)] = item[key]
            # print(row_num)
            print(i, end="         ")
            for value in item.values():
                print(value.ljust(15), end="")
            print('\n')
    # print(row_num)
    oper = int(input("1.修改   2.删除   3.返回 :"))
    if oper == 1:
        # 修改名片
        modification(**row_num)
    elif oper == 2:
        # 删除名片
        delete(**row_num)
    else:
        print("*" * 60)
        return


def search():
    """
    查询名片
    :return:
    """
    choice = int(input("请选择查询的关键字类型(1.姓名 2.电话 3.QQ 4.email):"))
    if choice == 1:
        # 根据姓名进行查询
        kw = input("请输入姓名：")
        search_detail("姓名", kw)
    elif choice == 2:
        # 根据电话进行查询
        kw = input("请输入电话：")
        search_detail("电话", kw)
    elif choice == 3:
        # 根据QQ进行查询
        kw = input("请输入QQ号码：")
        search_detail("QQ", kw)
    else:
        # 根据email进行查询
        kw = input("请输入email：")
        search_detail("email", kw)


def exit():
    """
    退出系统
    :return:
    """
    print("*" * 60)
    print("感谢使用此系统".center(60))
    print("*" * 60)
    sys.exit()


def menu(num):
    """
    菜单
    :param num:
    :return:
    """

    if num == 1:
        create()
    elif num == 2:
        show()
    elif num == 3:
        search()
    else:
        exit()


if __name__ == "__main__":
    list_info = []  # 存储名片信息
    view()
    while True:
        try:
            num = int(input("请选择功能："))
        except:
            print("请输入正确的选项！".center(55, "*"))
            continue
        menu(num)
